You might also want to multiply the velocity change (acceleration) by the time delta, and the velocity itself by the time delta again, if you're not doing fixed time steps. Also, do not use integer variables to represent vectors; the precision problems will be horrendous. Unless your target platform has some very weird requirements I would at least revise an object's position tracking structure to:
struct vector_2d{ float x; float y;};struct physics_object{ vector_2d position; vector_2d velocity; float angle;};
Keep your angle separated from your velocity as how the car is turned should be independent from its velocity. Consider to also add a z vector component even if your game is in 2D as you might want to track heights nontheless: Cars that can leave the ground driving off high edges, for bullets, and similar stuff.
EDIT: As Sir Sapo said, using floats (or doubles if you need more precision), will not influence your drawing negatively. Just convert each float to an integer like he showed, though you may or may not want to round the floats by making it int(float_number + 0.5f) instead.
EDIT2: When updating any object, you can do this (assuming 2D):
//dt is delta time, or time since last frame//acceleration is a scalar quantity, you can make this by summing forces and using the formula a = F / mplayer.velocity.x += cos(angle) * acceleration * dt;player.velocity.y += sin(angle) * acceleration * dt;player.position.x += player.velocity.x * dt;player.position.y += player.velocity.y * dt;