One type per value will always have a value assigned to it. Declared the variable and it entered the scope has a value. If the code does not set any one will be adopted the default value that is 0.
If you need to define if a variable had a value and then passed or not have another you have to control this separately in another variable or saying if it had a change in value or what was the original value to see if it is still the same, which gives a slightly different semantics. When a variable is worth 1 and you assign a value of 1 in it you have changed the value of the variable, but the result is the same, just make no mistake that there is another object there, but it has the same content. If you only want to know if the value is different then having the previous value seems the most appropriate. If you want to know if a new value has been assigned to the variable, but it does not matter if it has been changed, then a flag is more useful.
You can create a type to control this, but by description you can not do this in this case.